//
// 字符串
// Created by 麻再挺 on 2021/12/9.
//

#ifndef DATA_STRUCTURE_C_HSTRING_H
#define DATA_STRUCTURE_C_HSTRING_H
#include <stdio.h>
#include <stdlib.h>
#include "./../constant.h"

/**
 * 串分配定义
 */
typedef struct {
    // 若是非空串, 则按串长分配, 否则 ch为 NULL
    char *ch;
    // 串长度
    unsigned int length;
} HString;

/**
 * 生成一个值等于 *tmp 的 HString
 * @param str 字符串
 * @param tmp 字符串
 * @return
 */
Status HString_Assign(HString *str, char *tmp);

/**
 * 返回字符串元素个数, 即串的长度
 * @param str 字符串
 * @return
 */
int HString_Length(HString *str);

/**
 * 字符串比较
 * @param str 字符串 1
 * @param tmp 字符串 2
 * @return 若 str > tmp, 返回值 > 0; 若 str = tmp, 返回值 = 0;  若 str < tmp, 返回值 < 0;
 */
int HString_Compare(HString *str, HString *tmp);

/**
 * 将字符串清空, 并释放字符串所占空间
 * @param str 字符串
 * @return
 */
Status HString_Clear(HString *str);

/**
 * 用 tmp 返回 str1 与 str2 拼接完成的字符串
 * @param tmp 新串
 * @param str1 字符串 1
 * @param str2 字符串 2
 * @return
 */
Status HString_Concat(HString *tmp, HString *str1, HString *str2);

/**
 * 返回串的第 pos 个字符起的长度为 len 的子串
 * @param str 源串
 * @param pos 起始位置
 * @param len 子串长度
 * @return
 */
Status  HString_Substring(HString *str, int pos, int len, HString *subStr);

/**
 * 打印字符串
 * @param str 字符串
 * @return
 */
HString HString_Print(HString *str);

#endif //DATA_STRUCTURE_C_HSTRING_H
